iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0

Hi all, 來到第24天把,由於我們目前在 redis 上的使用都是直接 DI 一個名為 IConnectionMultiplexer 的物件,再透過 IDataBase 的物件接起來做 Redis 的使用,但其實我們的使用端不應該知道這麼細節的操作,因此才會有想把這些封裝成SDK的想法。

既然有想法那就來把 Redis 封裝成 SDK來使用吧!

弄髒手時間

RedisManager

這邊主要會有兩隻 method:

  • GetOrCreate: 拿值,如果不存在的 key就會執行第二個參數 func 在幫其加入 redis 做 cache。
  • Update: 單純更新 Redis內部的值,如果值不存在就 early return 。
public class RedisManager(IConnectionMultiplexer connectionMultiplexer)
{
    private readonly IDatabase _db = connectionMultiplexer.GetDatabase();

    public T GetOrCreate<T>(string key, Func<T> func)
    {
        var cachedValue = _db.StringGet(key);
        if (cachedValue.IsNullOrEmpty)
        {
            var value = func.Invoke();
            _db.StringSet(key, JsonSerializer.Serialize(value));
            return value;
        }

        return JsonSerializer.Deserialize<T>(cachedValue!)!;
    }
    
    public void Update<T>(string key, T value)
    {
        var originValue = _db.StringGet(key);
        if (originValue.IsNullOrEmpty)
        {
            return ;
        }
        
        _db.StringSet(key, JsonSerializer.Serialize(value));
    }
    
}

RedisRegistraion

這邊主要會幫使用端註冊 必要的DI

public static class RedisRegistration
{
    public static void UseResisSdk(this IServiceCollection services)
    {
        var redis = Environment.GetEnvironmentVariables()["REDIS_SERVER"]!.ToString()!;
        services.AddSingleton<IConnectionMultiplexer>(
            ConnectionMultiplexer.Connect(
                new ConfigurationOptions
                {
                    EndPoints = { { redis, 6379 } }
                }
            )
        );
    }
}

打包 Package to Nuget

目前專案到這邊應該就可以了,接著可以動點指令來打包SDK,指令如下:

dotnet pack .\RedisSDK\RedisSDK.csproj -c Release -o ./packout

接著在資料夾中就會出現 packout 的資料夾,裏頭有個此次SDK的 nupkg檔案,直接把這個檔案直接上傳至 nuget官網即可。

Conclusion

今天我們把 Redis 互動的部分封裝成 SDK,並上傳至 Nuget Server。 接著只需要在專案內部透過 Nuget 下載 SDK來做使用即可,明天就來 apply Redis SDK 吧!

結語: 藍色星期一


上一篇
Day 23 Docker-compose 專案帶著跑
下一篇
Day 25 Apply Redis SDK
系列文
Side-Project:: 為自己打造個可編輯的區塊鏈30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言